<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>水平扩容 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/_scale_horizontally.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/_scale_horizontally.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/_scale_horizontally.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/_scale_horizontally.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="getting-started.html">基础入门</a></span>
»
<span class="breadcrumb-link"><a href="distributed-cluster.html">分布式集群</a></span>
»
<span class="breadcrumb-node">水平扩容</span>
</div>
<div class="navheader">
<span class="prev">
<a href="_add_failover.html">« 添加故障转移</a>
</span>
<span class="next">
<a href="_coping_with_failure.html">应对故障 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_scale_horizontally"></a>水平扩容<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/020_Distributed_Cluster/25_Scale_horizontally.asciidoc">edit</a>
</h2>
</div></div></div>
<p>怎样为增长中的应用程序按需扩容呢？

当启动了第三个节点，集群将会看起来如<a class="xref" href="_scale_horizontally.html#cluster-three-nodes" title="拥有三个节点的集群——为了分散负载而对分片进行重新分配">图 4, “拥有三个节点的集群——为了分散负载而对分片进行重新分配”</a>所示。</p>
<div id="cluster-three-nodes" class="imageblock">
<div class="content">
<img src="../images/elas_0204.png" alt="拥有三个节点的集群">
</div>
<div class="title">图 4. 拥有三个节点的集群——为了分散负载而对分片进行重新分配</div>
</div>
<p><code class="word">Node 1</code> 和 <code class="word">Node 2</code> 上各有一个分片被迁移到了新的 <code class="word">Node 3</code> 节点，现在每个节点上都拥有2个分片，而不是之前的3个。
这表示每个节点的硬件资源（CPU, RAM, I/O）将被更少的分片所共享，每个分片的性能将会得到提升。</p>

<p>分片本身就是一个功能完整的搜索引擎，它拥有使用一个节点上的所有资源的能力。
我们这个拥有6个分片（3个主分片和3个副本分片）的索引可以最大扩容到6个节点，每个节点上存在一个分片，并且每个分片拥有所在节点的全部资源。</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_更多的扩容"></a>扩展更多节点<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/020_Distributed_Cluster/30_Scale_more.asciidoc">edit</a>
</h3>
</div></div></div>
<p>但是如果我们想要扩容超过6个节点怎么办呢？</p>
<p>主分片的数目在索引创建时就已经确定了下来。实际上，这个数目定义了这个索引能够 <em>存储</em> 的最大数据量。（实际大小取决于你的数据、硬件和使用场景。）
但是，读操作——搜索和返回数据——可以同时被主分片 <em>或</em> 副本分片所处理，所以当你拥有越多的副本分片时，也将拥有越高的吞吐量。</p>
<p>在运行中的集群上是可以动态调整副本分片数目的，我们可以按需伸缩集群。让我们把副本数从默认的 <code class="literal">1</code> 增加到 <code class="literal">2</code> ：</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">PUT /blogs/_settings
{
   "number_of_replicas" : 2
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/020_Distributed_Cluster/30_Replicas.json"></div>
<p>如<a class="xref" href="_scale_horizontally.html#cluster-three-nodes-two-replicas" title="将参数 number_of_replicas 调大到 2">图 5, “将参数 <code class="literal">number_of_replicas</code> 调大到 2”</a>所示， <code class="literal">blogs</code> 索引现在拥有9个分片：3个主分片和6个副本分片。
这意味着我们可以将集群扩容到9个节点，每个节点上一个分片。相比原来3个节点时，集群搜索性能可以提升 <em>3</em> 倍。</p>
<div id="cluster-three-nodes-two-replicas" class="imageblock">
<div class="content">
<img src="../images/elas_0205.png" alt="拥有2份副本分片3个节点的集群">
</div>
<div class="title">图 5. 将参数 <code class="literal">number_of_replicas</code> 调大到 2</div>
</div>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>当然，如果只是在相同节点数目的集群上增加更多的副本分片并不能提高性能，因为每个分片从节点上获得的资源会变少。
你需要增加更多的硬件资源来提升吞吐量。</p>
<p>但这些额外的副本确实意味着更多的冗余：按照上面的节点配置，我们可以在失去2个节点的情况下不丢失任何数据。</p>
</div>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="_add_failover.html">« 添加故障转移</a>
</span>
<span class="next">
<a href="_coping_with_failure.html">应对故障 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>